//
// Created by hugan on 2020/10/16.
//
#ifndef JOYSTICKCPP_TYPE_DEF_H
#define JOYSTICKCPP_TYPE_DEF_H

#include <dinput.h>

/**
 * 设备信息
 * LPDIRECTINPUT8->EnumDevices()中,转换后的设备信息
 */
typedef struct EnumDeviceData {
    //使用string会导致java调用时内存错误
    const char *tszInstanceName;
    /**
     * GUID字符串,格式: JoystickUtil.getGUIDString()
     */
    const char *guid;
} EnumDeviceData;

/**
 * 遍历设备的回调
 */
typedef void (*func_enumDevicesCallback)(EnumDeviceData data);

typedef struct EnumDeviceParam {
    bool isUtf8;
    func_enumDevicesCallback callback;
} EnumDeviceParam;

typedef struct EnumObjectsParam {
    int stickRange;
    LPDIRECTINPUTDEVICE8 g_pJoystick;
} EnumObjectsParam;

/**
 * 设备按键监听回调
 * @param state 设备按键数据
 * @param hr 监听过程中遇到的异常,如设备丢失;没有异常时为S_OK
 */
typedef void (*func_deviceStateCallback)(DIJOYSTATE2 state, HRESULT hr);

#endif //JOYSTICKCPP_TYPE_DEF_H